package fr.template.www.presentation.managedbean;

import fr.template.www.facade.ProduitDto;
import fr.template.www.presentation.bean.LigneProduitPanierBean;
import fr.template.www.presentation.bean.PanierBean;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Iterator;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedProperty;
import javax.inject.Named;

/**
 *
 * 
 * <p:ajax event="rowEdit" listener="#{tableBean.onEdit}" update=":form:messages" />  
        <p:ajax event="rowEditCancel" listener="#{tableBean.onCancel}" update=":form:messages" /> 
 * 
 * 
 * @author stagiaire
 */
@Named(value = "mbPanier")
@SessionScoped
public class PanierManagedBean implements Serializable {

    /**
     * Creates a new instance of PanierManagedBean
     */
    public PanierManagedBean() {
        panier=new PanierBean();
    }
    
    @ManagedProperty(value="#{mbSiteProperties}")
    private SitePropertiesBean siteProperties;
    private PanierBean panier;
    private BigDecimal prixTotal;
    
    // =================================================  //
    //                      METHODES                      //
    // =================================================  //
    
    /**
     * retire une ligne de produit au panier
     * @param lignePanier la ligne à retirer
     */
    public void removeLignePanier(LigneProduitPanierBean lignePanier){
        if (this.panier.getListeLignes().contains(lignePanier))
        {
            this.panier.getListeLignes().remove(lignePanier);
        }
//        calculPrixTotal();
    }
    
    /**
     * affiche le panier
     */
    public String afficherPanier(){
        siteProperties.setPageCentrale("includes/panier.xhtml");
//        if (panier.isVide()) {
//            siteProperties.setPageCentrale("includes/panierVide.xhtml");
//        }
//        else{
//            siteProperties.setPageCentrale("includes/panier.xhtml");
//        }
        return "";
    }
     
    /**
     * ajoute une ligne de produit au panier
     * @param lignePanier la ligne à ajouter
     */
    public void addLignePanier(LigneProduitPanierBean lignePanier){
       if (this.panier.getListeLignes().contains(lignePanier))
       {
          lignePanier.setQuantite(lignePanier.getQuantite()+1);
          
       }else{
            this.panier.getListeLignes().add(lignePanier);
       }
//        calculPrixTotal();
    }
    
    /**
     * ajoute une ligne de produit au panier
     * @param lignePanier la ligne à ajouter
     * @param 
     */
    public void addLignePanier(ProduitDto produit){
       panier.addLignePanier(new LigneProduitPanierBean(produit, 1, produit.getPrix()));
//        System.out.println("---------------------------------------");
//       for(LigneProduitPanierBean ligne:panier.getListeLignes()){
//           System.out.println(ligne.getProduit().getTitreProduit()+" "+ligne.getQuantite());
//       }
//       System.out.println("---------------------------------------");
//        
//        System.out.println("ici "+produit.getTitreProduit());
//       Iterator<LigneProduitPanierBean> it =  this.panier.getListeLignes().iterator();
//       while(it.hasNext())
//       {
//           LigneProduitPanierBean ligne = it.next();
//           if (ligne.getProduit() == produit){
//               ligne.setQuantite(ligne.getQuantite()+1);
//           } else {
//               this.panier.getListeLignes().add(
//                       new LigneProduitPanierBean(produit, 1, produit.getPrix()));
//           }
//       }
//        calculPrixTotal();
    }
    
    // =================================================  //
    //                    GETTER - SETTER                 //
    // =================================================  //
              
    /**
     * calcule le prix total du prix du panier
     * @return le prix du panier
     */
    private void calculPrixTotal(){
        prixTotal = new BigDecimal(BigInteger.ZERO);
        for (LigneProduitPanierBean ligne : panier.getListeLignes())
        {
            prixTotal = prixTotal.add(ligne.getPrix());
        }
    }
       
    /**
     * retourne les lignes de produits contenues dans le panier
     * @return les ligneProduits du panier
     */
    public List<LigneProduitPanierBean> getLignesPanier(){
        return panier.getListeLignes();
    }
    
    /**
     * Obtient le panier
     * @return panier
     */
    public PanierBean getPanier() {
        return panier;
    }
  
    /**
    * Defini le panier
    * @param panier panier
    */
    public void setPanier(PanierBean panier) {
        this.panier = panier;
    }
    
    /**
     * Obtient les proprietes du site
     * @return proprietes du site
     */
     public SitePropertiesBean getSiteProperties() {
        return siteProperties;
    }

     /**
     * Definit les proprietes du site
     * @return proprietes du site
     */
    public void setSiteProperties(SitePropertiesBean siteProperties) {
        this.siteProperties = siteProperties;
    }

    /**
     * Obtient le prix total du panier
     * @return prix total du panier
     */
    public BigDecimal getPrixTotal() {
        calculPrixTotal();
        return prixTotal;
    }
}
